<?php
namespace Pay\Service\Wxpay;

use Pay\Service\Wxpay\ActionAbstract;

class Callback extends ActionAbstract
{

    /*
     * 如果没有参数config默认取自有的配置
     */
    public function __construct($config = false)
    {
        parent::__construct($config);
    }

    /*
     * 验证回调的正确性，不处理业务逻辑
     * return true验证成功
     * 验证失败时，直接输出给微信错误信息
     */
    public function verification($data)
    {
        //以下注释的三行，需要放在业务页面中进行处理
        //$xmlData = file_get_contents('php://input');
        //libxml_disable_entity_loader(true);
        //$data = json_decode(json_encode(simplexml_load_string($xmlData, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
        ksort($data);
        $buff = '';
        foreach ($data as $k => $v) {
            if ($k != 'sign') {
                $buff .= $k . '=' . $v . '&';
            }
        }
        $stringSignTemp = $buff . 'key=' . $this->config['key'];
        $sign = strtoupper(md5($stringSignTemp));
        if ($sign != $data['sign']) {
            echo '<xml>
                <return_code><![CDATA[SUCCESS]]></return_code>
                <return_msg><![CDATA[SIGNERR]]></return_msg>
                </xml>';
            exit();
        }
        return true;
        //以下注释的内容，需要判断结果为true后，处理完业务逻辑后，输出给微信;
        /*echo '<xml>
            <return_code><![CDATA[SUCCESS]]></return_code>
            <return_msg><![CDATA[OK]]></return_msg>
            </xml>';
            exit();*/
    }
}
?>
